#pragma once

// base class for object state, ie: Frozen, Dead, to-delete Agility+10
// should we have a duration ? a state manager handling stateRemoval?
// need a few callback for when the state is removed, call the gameobject it belongs to.
class State
{
public:
	//should it be in an underlying rtti baseclass?
	virtual string& GetType();
	//a collection of stategroups, that can be useful if we want for instance that only 
	// one Speed debuff be allowed per character, or 5. this should be delegated to the stateGroup
	virtual std::vector<StateGroup> GetGroups(); 
	
	virtual int GetDuration();// maybe ?

	virtual void OnBeforeRemoved(StateRemoveListener listener);//functionPtr, we need to discuss about events and listeners.

	virtual void SetOwner(GamObject obj);//the owner of the state, could be anything in the world, the caster, some trap the player walked on.
	
	virtual void SetTarget(GameObject obj); //the gameObject the state is applied to;

	virtual bool CanBeAppliedTo(GameObject target); // some check method to verify that the state can be applied to the given object

	virtual void Update(StateUpdateArgs args);

	State(void);
	
	virtual ~State(void);
private:


};
